package com.ruoyi.system.service.impl;

import com.ruoyi.common.utils.SecurityUtils;
import com.ruoyi.system.domain.UserScore;
import com.ruoyi.system.mapper.GradesMapper;
import com.ruoyi.system.service.IGradesService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;

@Service
public class GradesServiceImpl implements IGradesService {
    @Autowired
    private GradesMapper gradesMapper;


//  根据用户id查询评分
    @Override
    public List<Map> selectableById(Integer userId) {
        //定义一个map集合
        List<Map> maps=new ArrayList<>();
        //查询用户的昵称，角色部门
        Map map = gradesMapper.selectGradesuserById(userId);
        maps.add(map);
        //提取出来用户的角色进行判断
        Integer id= Integer.valueOf(map.get("role_id").toString());
        //101是中层领导 102 100是基层员工和高层领导(102因为手机端员工是可以评价部门领导的)
        if(id ==102 || id==100){
            List<Map>  topic= gradesMapper.selectGrades();
            for (Map map1:topic){
                maps.add(map1);
            }
        }else if(id ==101){
            List<Map> topic = gradesMapper.selectGrades01();
             for (Map map1:topic){
                maps.add(map1);
            }
        }
        return maps;
    }

//   新增评分
     @Override
     @Transactional
    public void insertables(Map map) {
        UserScore userScore=new UserScore();
        //被评分人的id
        Integer userid= Integer.valueOf(map.get("userid").toString());
        //考核日期
        String assessdate=map.get("assessDate").toString();
        //提取所有评分和强中弱的id
         List<Map> userscore= (List<Map>) map.get("userscore");
         for (Map map1:userscore){
             //存放用户id
             userScore.setUserId(userid);
             //判断前端传过来的强度id是否为空
             if(map1.get("category_Id").toString()==""){
                 //定义一个存放分数的对象
                 Double scores = Double.valueOf(String.valueOf(map1.get("score")));
                 //根据分数判断这个分数属于哪个等级要是分数是15到20之间的就属于强等级 剩下的依次是中,弱
                 if(scores>15 && scores<20){
                     //存放分数
                     userScore.setScore(Double.valueOf(String.valueOf(map1.get("score"))));
                     //存放强度id
                     userScore.setCategoryId(4);
                 } else if (scores>10 && scores<15) {
                    userScore.setScore(Double.valueOf(String.valueOf(map1.get("score"))));
                    userScore.setCategoryId(5);
                 }else {
                     userScore.setScore(Double.valueOf(String.valueOf(map1.get("score"))));
                    userScore.setCategoryId(6);
                 }
             }else {
                 //要是不为空就直接存入
                 userScore.setScore(Double.valueOf(String.valueOf(map1.get("score"))));
                 userScore.setCategoryId(Integer.valueOf(map1.get("category_Id").toString()));
             }
             //获取当前系统时间
             LocalDateTime dateTime=LocalDateTime.now();
             DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
             //存放评分日期
             userScore.setRatingDate(formatter.format(dateTime));
            //存放考核日期
            userScore.setAssessDate(assessdate+"-01");
             //获取登录角色的id
             Integer userId= SecurityUtils.getUserId().intValue();
             //评分人存储登录角色的id
            userScore.setRaterNum(userId);
            //存放每题分数和强度的方法
            gradesMapper.insertable(userScore);
         }
        //评分状态
        Integer status=1;
        //评分时间
        String ratingdate=userScore.getRatingDate();
        //评分人
        Integer raternum=userScore.getRaterNum();
        //拼接考核时间
         String assessdates=assessdate+"-01";
         //插入评分状态的方法
       gradesMapper.inserevaluation(userid,status,assessdates,ratingdate,raternum);
    }


    //专门查询管理岗位评分的方法
    @Override
    public List<Map> selectmanage(Integer userId) {
        //定义一个map集合
        List<Map> maps=new ArrayList<>();
        //查询用户的昵称，角色部门
        Map map = gradesMapper.selectGradesuserById(userId);
        maps.add(map);
        List<Map> topic= gradesMapper.selectGrades01();
        for (Map map1:topic){
            maps.add(map1);
        }
        return maps;
    }

}
